<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 逻辑运算符两边会发生隐式类型转换：其他转布尔

  // ||：两边只要有一个为true，结果即为true
  // 从左向右检测，遇到true值，就停止，并返回当前true值
  // 如果先遇到false值，无论右侧是什么，都会返回右侧的值
  // console.log( 2 || 3 );
  // console.log( 3 || 2 );

  // console.log( 0 || 1 );
  // console.log( 1 || 0 );

  // console.log( 0 || NaN );
  // console.log( NaN || 0 );


  // &&：两边只要有一个为false，结果即为false
  // 从左向右检测，遇到false值，就停止，并返回这个false值
  // 如果先遇到true值，无论右侧是什么，都会返回右侧的值
  // console.log( 2 && 3 );    // 3
  // console.log( 3 && 2 );    // 2

  // console.log( 0 && 1 );    // 0
  // console.log( 1 && 0 );    // 0

  // console.log( 0 && NaN );    // 0
  // console.log( NaN && 0 );    // NaN

  // ======

  // 默认值的处理
  // var n;
  // var n = 5;
  // var result = n || 0;
  // console.log(result);


  // 可选函数的执行
  // var fn;
  // var fn = function(){
  //   console.log("hello")
  // }
  // fn && fn();
  // console.log(1);


  // =======


  // !的使用技巧：转布尔

  console.log( !!"hello" );

  console.log( !!"" );

  console.log( !!0 );

  console.log( !!1 );


</script>
</html>